package java8.xml.dom4j;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

/**
 * @author 周宇
 * @create 2020-08-28 10:33
 */
public class ReadAndPrintXML {
    public static void main(String[] args) throws Exception {
        // SAXReader就是一个管道，用一个流的方式，把xml文件读出来
        SAXReader reader = new SAXReader();
        // 读取XML文档，返回Document对象
        Document document = reader.read(new File("src/main/resources/xml/dw_cle.xml"));
        // 获取根元素节点
        Element root = document.getRootElement();

        StringBuilder sb = new StringBuilder();
        recursion(root, sb);
        System.out.println(sb.toString());
    }

    //递归
    private static void recursion(Element ele, StringBuilder sb) {
        sb.append("<");
        // 解析元素节点
        sb.append(ele.getName());
        // 解析属性节点
        List<Attribute> attributes = ele.attributes();
        for (Attribute attribute : attributes) {
            sb.append(" ");
            sb.append(attribute.getName());
            sb.append("=\"");
            sb.append(attribute.getValue()+"\"");
        }
        sb.append(">\n");
        // 解析文本节点
        if(!ele.getText().trim().equals("")){
            sb.append(ele.getText());
        }
        // 递归解析元素节点
        List<Element> elements = ele.elements();
        for (Element element : elements) {
            recursion(element, sb);
        }
        sb.append("<" + ele.getName() + "/>\n");
    }
}
